package codequity.one;

import java.util.Date;
import java.util.GregorianCalendar;

public class Client18 {
    public static void main(String[] args) {
        //String对象是否是object的实例
        boolean b1 = "String" instanceof Object;
        //String对象是否是String的实例
        boolean b2 = new String() instanceof String;

        //Object对象是否是String实例
        boolean b3 = new Object() instanceof String;

        //拆箱类型是否是装箱类型的实例
        //编译不能通过因为“A”是一个字符不是一个对象，instanceof只能用于对象的判断
        //boolean b4 = 'A' instanceof Character;

        //空对象是否是String的实例
        //左操作数是null,结果就直接返回false
        boolean b5 = null instanceof String;

        //类型转换后的空对象是否是String的实例
        //false，null做类型转换还是null
        boolean b6 = (String) null instanceof String;

        //Date对象是否是String的实例
        //boolean b7 = new Date() instanceof String;

        //在泛型类中判断String对象是否是Date的实例
        //编译成功，且返回值为false,因为java泛型是为编码服务的，在编译成字节码时，T已经是Object类型了
        boolean b8 = new GenericClass<String>().isDateInstance("");
        System.out.println(b8);
    }
}

class GenericClass<T> {

    //Java的泛型是为编码服务的，在编译成字节码时，T已经是Object类型了。
    //判断是否是Date类型
    public boolean isDateInstance(T t) {
        return t instanceof Date;
    }
}